home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / Params / ADnoteParameters.h < prev    next >
C/C++ Source or Header  |  2005-03-14  |  7KB  |  283 lines

  1. /*
  2.   ZynAddSubFX - a software synthesizer
  3.  
  4.   ADnoteParameters.h - Parameters for ADnote (ADsynth)
  5.   Copyright (C) 2002-2005 Nasca Octavian Paul
  6.   Author: Nasca Octavian Paul
  7.  
  8.   This program is free software; you can redistribute it and/or modify
  9.   it under the terms of version 2 of the GNU General Public License 
  10.   as published by the Free Software Foundation.
  11.  
  12.   This program is distributed in the hope that it will be useful,
  13.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.   GNU General Public License (version 2) for more details.
  16.  
  17.   You should have received a copy of the GNU General Public License (version 2)
  18.   along with this program; if not, write to the Free Software Foundation,
  19.   Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  20.  
  21. */
  22.  
  23. #ifndef AD_NOTE_PARAMETERS_H
  24. #define AD_NOTE_PARAMETERS_H
  25.  
  26.  
  27. #include "../globals.h"
  28. #include "EnvelopeParams.h"
  29. #include "LFOParams.h"
  30. #include "FilterParams.h"
  31. #include "../Synth/OscilGen.h"
  32. #include "../Synth/Resonance.h"
  33. #include "../Misc/Util.h"
  34. #include "../Misc/XMLwrapper.h"
  35. #include "../DSP/FFTwrapper.h"
  36. #include "Presets.h"
  37.  
  38.   enum FMTYPE{NONE,MORPH,RING_MOD,PHASE_MOD,FREQ_MOD,PITCH_MOD};
  39.     
  40.    /*****************************************************************/
  41.    /*                    GLOBAL PARAMETERS                          */
  42.    /*****************************************************************/
  43.  
  44.     struct ADnoteGlobalParam{
  45.     
  46.        /* The instrument type  - MONO/STEREO
  47.       If the mode is MONO, the panning of voices are not used
  48.       Stereo=1, Mono=0. */
  49.      
  50.     unsigned char PStereo; 
  51.       
  52.     
  53.        /******************************************
  54.     *     FREQUENCY GLOBAL PARAMETERS        *
  55.     ******************************************/
  56.     unsigned short int PDetune;//fine detune
  57.     unsigned short int PCoarseDetune;//coarse detune+octave
  58.     unsigned char PDetuneType;//detune type
  59.     
  60.     unsigned char PBandwidth;//how much the relative fine detunes of the voices are changed
  61.  
  62.     EnvelopeParams *FreqEnvelope; //Frequency Envelope
  63.     
  64.     LFOParams *FreqLfo;//Frequency LFO
  65.  
  66.        /********************************************
  67.     *     AMPLITUDE GLOBAL PARAMETERS          *
  68.     ********************************************/
  69.  
  70.     /* Panning -  0 - random 
  71.               1 - left
  72.              64 - center
  73.             127 - right */
  74.     unsigned char PPanning;
  75.  
  76.     unsigned char PVolume;
  77.  
  78.     unsigned char PAmpVelocityScaleFunction;
  79.  
  80.     EnvelopeParams *AmpEnvelope;
  81.    
  82.     LFOParams *AmpLfo;   
  83.  
  84.     unsigned char PPunchStrength,PPunchTime,PPunchStretch,PPunchVelocitySensing;
  85.  
  86.        /******************************************
  87.     *        FILTER GLOBAL PARAMETERS        *
  88.     ******************************************/
  89.     FilterParams *GlobalFilter;
  90.  
  91.     // filter velocity sensing
  92.     unsigned char PFilterVelocityScale; 
  93.  
  94.     // filter velocity sensing
  95.     unsigned char PFilterVelocityScaleFunction;
  96.     
  97.     EnvelopeParams *FilterEnvelope;
  98.     
  99.     LFOParams *FilterLfo;
  100.     
  101.     // RESONANCE
  102.     Resonance *Reson;
  103.     
  104.     //how the randomness is applied to the harmonics on more voices using the same oscillator
  105.     unsigned char Hrandgrouping;
  106.     };  
  107.  
  108.  
  109.     
  110.    /***********************************************************/
  111.    /*                    VOICE PARAMETERS                     */
  112.    /***********************************************************/
  113.     struct ADnoteVoiceParam{
  114.  
  115.         /* If the voice is enabled */
  116.         unsigned char Enabled; 
  117.  
  118.     /* Type of the voice (0=Sound,1=Noise)*/
  119.     unsigned char Type;
  120.     
  121.     /* Voice Delay */
  122.         unsigned char PDelay;
  123.  
  124.     /* If the resonance is enabled for this voice */
  125.     unsigned char Presonance;
  126.     
  127.     // What external oscil should I use, -1 for internal OscilSmp&FMSmp
  128.         short int Pextoscil,PextFMoscil;
  129.     // it is not allowed that the externoscil,externFMoscil => current voice
  130.  
  131.     // oscillator phases
  132.     unsigned char Poscilphase,PFMoscilphase;
  133.  
  134.     // filter bypass
  135.     unsigned char Pfilterbypass;
  136.  
  137.         /* Voice oscillator */ 
  138.         OscilGen *OscilSmp;    
  139.  
  140.         /**********************************
  141.     *     FREQUENCY PARAMETERS        *
  142.     **********************************/
  143.  
  144.     /* If the base frequency is fixed to 440 Hz*/
  145.     unsigned char Pfixedfreq;
  146.     
  147.     /* Equal temperate (this is used only if the Pfixedfreq is enabled)
  148.        If this parameter is 0, the frequency is fixed (to 440 Hz);
  149.        if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */
  150.     unsigned char PfixedfreqET;
  151.  
  152.     /* Fine detune */
  153.     unsigned short int PDetune;
  154.  
  155.     /* Coarse detune + octave */
  156.     unsigned short int PCoarseDetune;
  157.  
  158.     /* Detune type */
  159.     unsigned char PDetuneType;
  160.     
  161.     /* Frequency Envelope */
  162.     unsigned char PFreqEnvelopeEnabled;
  163.     EnvelopeParams *FreqEnvelope;
  164.  
  165.     /* Frequency LFO */
  166.     unsigned char PFreqLfoEnabled;
  167.     LFOParams *FreqLfo;
  168.     
  169.  
  170.     /***************************
  171.     *   AMPLITUDE PARAMETERS   *
  172.     ***************************/
  173.  
  174.     /* Panning       0 - random
  175.              1 - left
  176.                 64 - center
  177.                127 - right
  178.        The Panning is ignored if the instrument is mono */          
  179.     unsigned char PPanning;
  180.  
  181.     /* Voice Volume */
  182.     unsigned char PVolume;
  183.     
  184.     /* If the Volume negative */
  185.     unsigned char PVolumeminus;
  186.  
  187.     /* Velocity sensing */
  188.     unsigned char PAmpVelocityScaleFunction;
  189.  
  190.     /* Amplitude Envelope */
  191.     unsigned char PAmpEnvelopeEnabled;
  192.     EnvelopeParams *AmpEnvelope;
  193.     
  194.     /* Amplitude LFO */
  195.     unsigned char PAmpLfoEnabled;
  196.     LFOParams *AmpLfo;
  197.  
  198.  
  199.  
  200.     /*************************
  201.     *   FILTER PARAMETERS    *
  202.     *************************/
  203.     
  204.     /* Voice Filter */
  205.     unsigned char PFilterEnabled;
  206.     FilterParams *VoiceFilter;
  207.     
  208.     /* Filter Envelope */
  209.     unsigned char PFilterEnvelopeEnabled;
  210.     EnvelopeParams *FilterEnvelope;
  211.     
  212.     /* LFO Envelope */
  213.     unsigned char PFilterLfoEnabled;
  214.     LFOParams *FilterLfo;
  215.  
  216.     /****************************
  217.     *   MODULLATOR PARAMETERS   *
  218.     ****************************/
  219.  
  220.     /* Modullator Parameters (0=off,1=Morph,2=RM,3=PM,4=FM.. */
  221.     unsigned char PFMEnabled;
  222.         
  223.     /* Voice that I use as modullator instead of FMSmp. 
  224.        It is -1 if I use FMSmp(default).
  225.        It maynot be equal or bigger than current voice */
  226.     short int PFMVoice;
  227.     
  228.     /* Modullator oscillator */
  229.     OscilGen *FMSmp;    
  230.  
  231.     /* Modullator Volume */
  232.     unsigned char PFMVolume;
  233.  
  234.     /* Modullator damping at higher frequencies */
  235.     unsigned char PFMVolumeDamp;
  236.  
  237.     /* Modullator Velocity Sensing */
  238.     unsigned char PFMVelocityScaleFunction;
  239.  
  240.     /* Fine Detune of the Modullator*/
  241.     unsigned short int PFMDetune; 
  242.  
  243.     /* Coarse Detune of the Modullator */
  244.     unsigned short int PFMCoarseDetune; 
  245.  
  246.     /* The detune type */
  247.     unsigned char PFMDetuneType;
  248.         
  249.     /* Frequency Envelope of the Modullator */
  250.     unsigned char PFMFreqEnvelopeEnabled;
  251.     EnvelopeParams *FMFreqEnvelope;
  252.  
  253.     /* Frequency Envelope of the Modullator */
  254.     unsigned char PFMAmpEnvelopeEnabled;
  255.     EnvelopeParams *FMAmpEnvelope;
  256.     }; 
  257.  
  258. class ADnoteParameters:public Presets{
  259.     public:
  260.     ADnoteParameters(FFTwrapper *fft_);
  261.     ~ADnoteParameters();
  262.  
  263.     ADnoteGlobalParam GlobalPar;
  264.     ADnoteVoiceParam VoicePar[NUM_VOICES];
  265.  
  266.     void defaults();
  267.     void add2XML(XMLwrapper *xml);
  268.         void getfromXML(XMLwrapper *xml);
  269.  
  270.     REALTYPE getBandwidthDetuneMultiplier();
  271.     private:
  272.     void defaults(int n);//n is the nvoice
  273.  
  274.     void EnableVoice(int nvoice);        
  275.     void KillVoice(int nvoice);        
  276.     FFTwrapper *fft;    
  277.  
  278.     void add2XMLsection(XMLwrapper *xml,int n);
  279.         void getfromXMLsection(XMLwrapper *xml,int n);
  280. };
  281.  
  282. #endif
  283.